#pragma once
#include <QObject>

#include "RsgisPortal.h"

#include "RsGisLibUtiStretchImg.h"
#include "RsGisLibUtiStretchImgwithStats.h"
#include "RsGisLibUtiMaskImage.h"
#include "RsGisLibUtiCreateTiles.h"
#include "RsGisLibUtiPopuImgStats.h"
#include "RsGisLibUtiImageMosaic.h"
#include "RsGisLibUtiImageInclude.h"
#include "RsGisLibUtiImageIncluOver.h"
#include "RsGisLibUtiImageIncluOverview.h"
#include "RsGisLibUtiAssignProj.h"
#include "RsGisLibUtiAssignSpatialInfo.h"
#include "RsGisLibUtiCopyProj.h"
#include "RsGisLibUtiCopyProjSpatial.h"
#include "RsGisLibUtiStackImageBands.h"
#include "RsGisLibUtiImgRasterZonetoHDF.h"
#include "RsGisLibUtiImgBandRasterZonetoHDF.h"
#include "RsGisLibUtiSubset.h"
#include "RsGisLibUtiSubsetBox.h"
#include "RsGisLibUtiSubsettoPolys.h"
#include "RsGisLibUtiSubsettoImg.h"
#include "RsGisLibUtiSubsetImgBands.h"
#include "RsGisLibUtiCrtBlanImg.h"
#include "RsGisLibUtiCrtCopyBlanImg.h"
#include "RsGisLibUtiCrtCopyBlanImgVecEx.h"
#include "RsGisLibUtiStackStats.h"
#include "RsGisLibUtiProReguGridImg.h"
#include "RsGisLibUtiFiniteImgMask.h"
#include "RsGisLibUtiValidImgMask.h"
#include "RsGisLibUtiComImgSinIgnNoData.h"
#include "RsGisLibUtiPerfRandPxlSample.h"
#include "RsGisLibUtiPerfRandPxlSampleSmlPxlCnt.h"
#include "RsGisLibUtiPerfHCSPanSharp.h"

class RsGisLibCMDUtils : public QObject
{
	Q_OBJECT
public:
	RsGisLibCMDUtils(RsgisPortal* Port);
	~RsGisLibCMDUtils();
	RsgisPortal* ClientPort;

public:
	RsGisLibUtiStretchImg* rsgisUtiStretchImg;
	RsGisLibUtiStretchImgwithStats* rsgisUtiStretchImgwithStats;
	RsGisLibUtiMaskImage* rsgisUtiMaskImage;
	RsGisLibUtiCreateTiles* rsgisUtiCreateTiles;
	RsGisLibUtiPopuImgStats* rsgisUtiPopuImgStats;
	RsGisLibUtiImageMosaic* rsgisUtiImageMosaic;
	RsGisLibUtiImageInclude* rsgisUtiImageInclude;
	RsGisLibUtiImageIncluOver* rsgisUtiImageIncluOver;
	RsGisLibUtiImageIncluOverview* rsgisUtiImageIncluOverview;
	RsGisLibUtiAssignProj* rsgisUtiAssignProj;
	RsGisLibUtiAssignSpatialInfo* rsgisUtiAssignSpatialInfo;
	RsGisLibUtiCopyProj* rsgisUtiCopyProj;
	RsGisLibUtiCopyProjSpatial* rsgisUtiCopyProjSpatial;
	RsGisLibUtiStackImageBands* rsgisUtiStackImageBands;
	RsGisLibUtiImgRasterZonetoHDF* rsgisUtiImgRasterZonetoHDF;
	RsGisLibUtiImgBandRasterZonetoHDF* rsgisUtiImgBandRasterZonetoHDF;
	RsGisLibUtiSubset* rsgisUtiSubset;
	RsGisLibUtiSubsetBox* rsgisUtiSubsetBox;
	RsGisLibUtiSubsettoPolys* rsgisUtiSubsettoPolys;
	RsGisLibUtiSubsettoImg* rsgisUtiSubsettoImg;
	RsGisLibUtiSubsetImgBands* rsgisUtiSubsetImgBands;
	RsGisLibUtiCrtBlanImg* rsgisUtiCrtBlanImg;
	RsGisLibUtiCrtCopyBlanImg* rsgisUtiCrtCopyBlanImg;
	RsGisLibUtiCrtCopyBlanImgVecEx* rsgisUtiCrtCopyBlanImgVecEx;
	RsGisLibUtiStackStats* rsgisUtiStackStats;
	RsGisLibUtiProReguGridImg* rsgisUtiProReguGridImg;
	RsGisLibUtiFiniteImgMask* rsgisUtiFiniteImgMask;
	RsGisLibUtiValidImgMask* rsgisUtiValidImgMask;
	RsGisLibUtiComImgSinIgnNoData* rsgisUtiComImgSinIgnNoData;
	RsGisLibUtiPerfRandPxlSample* rsgisUtiPerfRandPxlSample;
	RsGisLibUtiPerfRandPxlSampleSmlPxlCnt* rsgisUtiPerfRandPxlSampleSmlPxlCnt;
	RsGisLibUtiPerfHCSPanSharp* rsgisUtiPerfHCSPanSharp;

public slots:
	void UtiStretchImg();
	void UtiStretchImgwithStats();
	void UtiMaskImage();
	void UtiCreateTiles();
	void UtiPopuImgStats();
	void UtiImageMosaic();
	void UtiImageInclude();
	void UtiImageIncluOver();
	void UtiImageIncluOverview();
	void UtiAssignProj();
	void UtiAssignSpatialInfo();
	void UtiCopyProj();
	void UtiCopyProjSpatial();
	void UtiStackImageBands();
	void UtiImgRasterZonetoHDF();
	void UtiImgBandRasterZonetoHDF();
	void UtiSubset();
	void UtiSubsetBox();
	void UtiSubsettoPolys();
	void UtiSubsettoImg();
	void UtiSubsetImgBands();
	void UtiCrtBlanImg();
	void UtiCrtCopyBlanImg();
	void UtiCrtCopyBlanImgVecEx();
	void UtiStackStats();
	void UtiProReguGridImg();
	void UtiFiniteImgMask();
	void UtiValidImgMask();
	void UtiComImgSinIgnNoData();
	void UtiPerfRandPxlSample();
	void UtiPerfRandPxlSampleSmlPxlCnt();
	void UtiPerfHCSPanSharp();
};
